package com.starview.platform.data.type;

import com.starview.star.compiler.canonical.IContentExpression;
import com.starview.star.compiler.util.PrettyPrintable;

/**
 * An IValueSpecifier is a specification of constructed values. A given type may have more than one
 * IValueSpecifier; however, certain types must have exactly one value specifier: specifically
 * {@link ScalarSpecifier}s may not be mixed with {@link ConstructorSpecifier}s.
 * 
 * @author fgm
 * 
 */

public interface IValueSpecifier extends PrettyPrintable
{
  /**
   * The label of the value specifier
   * 
   * @return
   */
  String getLabel();

  /**
   * Every constructor has a type. That type is the same type that would be needed were the
   * constructor to be a 'real' function; which of course it is.
   * 
   * @return the type of the function
   */
  IType getConType();

  /**
   * Where the constructor is defined, in some source file
   * 
   * @return
   */
  Location getLoc();

  /**
   * Access the constructor code itself
   * 
   * @return
   */
  IContentExpression source();
}
